/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy.
 */
package cz.pecinovsky.english.pojj.adv_demo.ui;

import cz.pecinovsky.english.pojj.adv_demo.byt_lednička.hra.Hra_BytLednička;
import  cz.pecinovsky.english.pojj.adv_framework.game_txt.IGame;
import  cz.pecinovsky.english.pojj.adv_framework.game_txt.IUI;

import javax.swing.JOptionPane;



/*******************************************************************************
 * Instance třídy {@code WindowUI} přestavují ...
 *
 * @author    Rudolf PECINOVSKÝ
 * @version   0.00.000
 */
public class WindowUI implements IUI
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     *
     */
    public WindowUI()
    {
    }


//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Spustí komunikaci mezi instancí a zadanou hrou,
     * přičemž instance zprostředkovává komunikaci s uživatelem.
     *
     * @param hra Hra, kterou ma dané UI spustit
     */
    @Override
    public void startGame(IGame hra)
    {
        String příkaz;
        String zpráva = hra.executeCommand("");
        do {
            příkaz = přečtiPříkaz(zpráva);
            zpráva = hra.executeCommand(příkaz);
        }while(! hra.isReady());
        JOptionPane.showMessageDialog(null, zpráva);
        System.exit(0);
    }

//TODO Vymyslet, jak umožnit spouštění ukázek hry
//    /***************************************************************************
//     * Spustí komunikaci mezi instancí a zadanou hrou,
//     * přičemž instance zprostředkovává komunikaci
//     * se scénářem zadané hry určeným zadáním jeho indexu.
//     *
//     * @param hra Hra, kterou ma dané UI spustit
//     * @param i   Index scénáře, prostřednictvím nějž budeme hru prověřovat
//     */
//    public void startGame(IGame hra, int i)
//    {
//        IScénář         scénář = hra.getScénář(i);
//        List<KrokScénáře> kroky = scénář.getKroky();
//        String          příkaz, zpráva, text;
//
//        for(KrokScénáře kt : kroky) {
//            příkaz = kt.getPříkaz();
//            zpráva = hra.executeCommand(příkaz);
//            text   = "Příkaz: " + příkaz + "\n\nZpráva:\n" + zpráva;
//            JOptionPane.showMessageDialog(null, text);
//            if(hra.isReady()) { break; }
//        }
//        JOptionPane.showMessageDialog(null, "KONEC HRY");
//        System.exit(0);
//    }
//

    /***************************************************************************
     * Spustí komunikaci mezi instancí a implicitní hrou,
     * přičemž instance zprostředkovává komunikaci s uživatelem.
     */
    @Override
    public void startGame()
    {
        IGame hra = Hra_BytLednička.getHra();
        startGame(hra);
    }

// TODO Druhá polovina spouštění ukázek hry
//    /***************************************************************************
//     * Spustí komunikaci mezi instancí a implicitní hrou,
//     * přičemž instance zprostředkovává komunikaci
//     * se scénářem zadané hry určeným zadáním jeho indexu.
//     *
//     * @param i Index scénáře, prostřednictvím nějž budeme hru prověřovat
//     */
//    public void startGame(int i)
//    {
//        IGame hra = new Hra_BytLednička();
//        startGame(hra, i);
//    }
//

//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Otevře jednoduché vstupní dialogové okno, v němž vypíše zadaný text
     * a vrátí text, který uživatel zadá do vstupního textového pole.
     *
     * @param text Vypisovaný text
     * @return Text zadaný uživatelem
     */
    private String přečtiPříkaz(String text)
    {
        return JOptionPane.showInputDialog(text);
    }



//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        WindowUI wui = new WindowUI();
//        wui.startGame(0);
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
